%%�����㷨  
clc,clear
load  Q2.mat;
% Chic_data = xlsread('chucunshuju_1.xlsx','A1:B49');  %49������
Chic_data = Q2{1 ,4};  % ��ȡ��һ�����ݣ�����
%Chic_data(9 ,:)=zeros
%Chic_data(10 ,:)=zeros
N = size(Chic_data , 1);  %����ά��
M = 50; % ��Ⱥ����
MM = 50; % ����������
L1 = [];
L2 = [];
%% ���ɳ�ʼ��Ⱥ
for i = 1 : M
    PartSeqence=randperm(N);
    H(i , :) = PartSeqence;  %��i����Ⱥ
    
    for j = 1 : N
        PS(j , :) = Chic_data(PartSeqence(j) , :);  
    end
    DY_data = PS;  %��i����Ⱥ��Ӧ���������
    [ P_fit , PLOT{i , 1} ,PartS{i ,1} ] = dingwei(PartSeqence ,DY_data);  %��i����Ⱥ����Ӧ�ȣ������ʣ���  ���ݶ�λ�㷨
    
    H_fit(i , :) = P_fit;  %��ʼ����Ⱥ����Ӧ��
end
HH_fit = max(H_fit);  %��ʼ����Ⱥ ��Ӧ�� �����Ӧ��
a = find(H_fit == HH_fit); %�����Ӧ�ȶ�Ӧ ��λ��
b = a(1 , 1);   %�����Ӧ�ȶ�Ӧ ��λ��
PartS_1 = PartS{b ,1};  % ͷ���ҵ�����ȡ����Ӧ������ͼ���С�
wolf(1 , :) = H(b , :); %ͷ��
PLOT_1 = PLOT{ b,1 }; % ͷ�Ƕ�Ӧ���Ļ�ͼ����.
H(b,:) = [];
wolf_1 = H; %������

for i5 = 1 : MM
    %% ����
    wolf_2 = [];
    for i1 = 1 : size(wolf_1 , 1)
        c = randi([1 N-4]);  %������߱������� �����λ�á�
        d = 5;  % �趨�������еĳ���
        c1 = c + d - 1 ;
        if c > (1 + N -4)/2
            wolf_2( i1 , :) = [wolf_1(i1 , c : c1) , wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) ];
        else
            wolf_2( i1 , :) = [wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) , wolf_1(i1 , c : c1)];
        end
        % wolf_2( i1 , :) = [wolf_1(i1 ,  1:(c-1)) , wolf_1(i1 , (c1+1) : N) , wolf_1(i1 , c : c1)]; %���ߺ�       
        PartSeqence = wolf_2( i1 , :);
        for j = 1 : N
            PS_1(j , :) = Chic_data(PartSeqence(j) , :);%������֮��������ж�Ӧ������ߴ磩
        end  
        DY_data = PS_1;  % ������ж�Ӧ�� �������
        [ Y_fit(i1 , :) ] = dingwei(PartSeqence , DY_data);  %���ߺ������ʣ���Ӧ��ֵ��
    end
    wolf_2 = [wolf_2 ; wolf];  %����ͷ�ǵ� ��Ⱥ
    Y_fit = [Y_fit ; HH_fit ];  %����ͷ�ǵ���Ⱥ ����Ӧ��
    wolf = [];
    
    HH_fit = max(Y_fit);  %���ߺ���Ⱥ ��Ӧ�� �����Ӧ��ͷ�� ��Ӧ����Ӧ��ֵ
    a = find(Y_fit == HH_fit );
    b = a(1 , 1);
    wolf(1 , :) = wolf_2(b , :);  %ͷ��  ����ͷ��
    wolf_2(b,:) = [];
    wolf_1 = wolf_2;  %������
    Y_fit(b,:) = [];   %�����Ƕ�Ӧ����Ӧ��ֵ
    %% ��Ϯ��
    for i3 = 1 : size(wolf_1 , 1)
        G = wolf_1(i3 , :);
        %�ж� ���� �� ͷ��֮�䲻ͬ����λ����Ӧ��λ�ã�
        for i7 = 1 : size(G ,2)
            if G(1, i7) ~= wolf(1 , i7)
                L1 =[L1 ,i7];%������
                L2 = [L2 , wolf(1 , i7) ];
                s1 = 3; % ѡ��s1������λ
            end
        end
        for i4 = 1 : s1   
            e1 = L1 (1 , i4); % G ��Ҫ ���ĵ�λ��e1
            e2 = L2 (1 , e1); %��L2��λ��e1����e2��ȡ��׼������wolf_1��
            e3 = find( G == e2); %�ҵ�G��e2��Ӧ��λ�� e3
            e4 = G(1 , e1); %ȷ��wolf_1��λ��e3��Ӧ���õ���e4
            %����e2 e4
            G(1 ,e3) = e4;
            G(1 ,e1) = e2;
        end
        PartSeqence = wolf_1( i3 , :);
        for j = 1 : N
            PS_2(j , :) = Chic_data(PartSeqence(j) , :);
        end
        DY_data = PS_2;  % ������� ��Ӧ�� �������
        [Z_fit(i3 , :) , PLOT{i3 ,1} , PartS{i3 ,1} ] = dingwei(PartSeqence , DY_data); %��i���������ǣ�Χ�������Ӧ�� ��Ӧ������ wolf_1
        %  ԭ����ͷ�� wolf ��Ӧ������Ӧ��ֵ HH_fit
    end
    
    wolf_2 = [wolf_1 ; wolf];  %����ͷ�ǵ� ��Ⱥ
    Z_fit = [Z_fit ; HH_fit ];  %����ͷ�ǵ���Ⱥ����Ӧ��
    wolf = [];
    
    HH_fit = max(Z_fit);  %Χ������Ⱥ ��Ӧ�� �����Ӧ��
    a = find(Z_fit == HH_fit );   %�����Ӧ��ֵ ��Ӧ�� ��i���������
    b = a(1 , 1);
    wolf(1 , :) = wolf_2(b , :);  %ͷ��  ����ͷ��
    wolf_2(b,:) = [];
    wolf_1 = wolf_2;  %������
    Z_fit(b,:) = [];
    
    PartSeqence = wolf;
    for j = 1 : N
        PS_3(j , :) = Chic_data(PartSeqence(j) , :);
    end
    DY_data = PS_3;  % ������� ��Ӧ�� �������
    
    [ fit,PLOT_1 , PartS_1 ] = dingwei(PartSeqence , DY_data);
    FIT(i5 , 1) = HH_fit;
end

% ��ͼ
  % s = 0; % ��ʼ������
for i6 = 1 : size(PLOT_1 ,1)   %%����Ҫ���¸��»���
    F = PLOT_1{i6,1};
    if F(1,1) == 0 && F(1,2) == 0  %�ж��Ƿ���»���
        
      % s = s +1;
        
      figure %figure(s); %���»���
        axis square   %(�����꣬������ÿ���̶ȷ�Χ��һ��)
        set(gca,'xLim',[0,2000]); %�����������
        set(gca,'yLim',[0,10000]);        
%         set(gca,'xlim',[0,2440]); %�����������
%         set(gca,'ylim',[0,1220]);        
        rectangle('Position',F);%�����м�ǵľ���
        title('����ͼ');
    else
        rectangle('Position',F);
    end
    %if   F(1,4) ~= 0
    text(F(1,1)+F(1,3)/2,F(1,2)+F(1,4)/2,num2str(PartS_1(1 , i6)))
   
    % text(F(1,1)+F(1,3)/2,F(1,2)+F(1,4)/2,num2str(PartS_1(1 , i6))); % ���������
    %end
    
end